package com.hopes.bizz.poll.hj212.beans.bo;

import com.alibaba.fastjson.JSONObject;
import com.hopes.bizz.common.core.util.DateUtils;
import io.netty.util.internal.StringUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;

import static com.hopes.bizz.poll.hj212.constant.HJ212Constant.*;


/**
 * 212协议主要参数
 */
@Data()
@EqualsAndHashCode(callSuper = false)
public class HJ212MainAttrBO {

    /**
     * 请求编码
     */
    private String qn;
    /**
     * 系统编号
     */
    private String st;
    /**
     * 设备唯一标识
     */
    private String mn;
    /**
     * 命令编号
     */
    private String cn;
    /**
     * 标志位，这个标志位包含标准版本号、是否拆分包、数据是否应答
     */
    private String flag;

    /**
     * 开始时间
     */
    private Date beginTime;
    /**
     * 截止时间
     */
    private Date endTime;
    /**
     * 数据时间
     */
    private Date dataTime;
    /**
     * orgId
     */
    private Long orgId;

    /**
     * 查找开始时间
     *
     * @param dataMap
     * @return
     */
    public static Date findBeginTime(JSONObject dataMap, String commandNo) {
        String timeStr = dataMap.getString(KEY_DATA_BEGIN_TIME);
        if (!StringUtil.isNullOrEmpty(timeStr)) {
            Date dataTime = DateUtils.parseDateByStr(timeStr, DATE_FORMAT);
            switch (commandNo) {
                case COMMAND_MINUTE_DATA:
                    dataTime = DateUtils.dateLimitMinute(dataTime);
                    break;
                case COMMAND_HOUR_DATA:
                    dataTime = DateUtils.dateLimitHour(dataTime);
                    break;
                case COMMAND_DAY_DATA:
                    dataTime = DateUtils.dateLimitDay(dataTime);
                    break;
                default:
                    break;
            }
            return dataTime;
        }
        return null;
    }

    /**
     * 查找结束时间
     *
     * @param dataMap
     * @return
     */
    public static Date findEndTime(JSONObject dataMap, String commandNo) {
        String timeStr = dataMap.getString(KEY_DATA_END_TIME);
        if (!StringUtil.isNullOrEmpty(timeStr)) {
            Date dataTime = DateUtils.parseDateByStr(timeStr, DATE_FORMAT);
            switch (commandNo) {
                case COMMAND_MINUTE_DATA:
                    dataTime = DateUtils.dateLimitMinute(dataTime);
                    break;
                case COMMAND_HOUR_DATA:
                    dataTime = DateUtils.dateLimitHour(dataTime);
                    break;
                case COMMAND_DAY_DATA:
                    dataTime = DateUtils.dateLimitDay(dataTime);
                    break;
                default:
                    break;
            }
            return dataTime;
        }
        return null;
    }

    /**
     * 查找数据时间
     *
     * @param dataMap
     * @return
     */
    public static Date findDataTime(JSONObject dataMap, String commandNo) {
        String timeStr = dataMap.getString(KEY_DATA_TIME);
        if (!StringUtil.isNullOrEmpty(timeStr)) {
            Date dataTime = DateUtils.parseDateByStr(timeStr, DATE_FORMAT);
            switch (commandNo) {
                case COMMAND_MINUTE_DATA:
                    dataTime = DateUtils.dateLimitMinute(dataTime);
                    break;
                case COMMAND_HOUR_DATA:
                    dataTime = DateUtils.dateLimitHour(dataTime);
                    break;
                case COMMAND_DAY_DATA:
                    dataTime = DateUtils.dateLimitDay(dataTime);
                    break;
                default:
                    break;
            }
            return dataTime;
        }
        return null;
    }
}
